package kr.co.bettersoft.waitnumbercustomer.activity;

import java.util.List;
import java.util.Locale;

import kr.co.bettersoft.waitnumbercustomer.common.CommonConstant;
import kr.co.bettersoft.waitnumbercustomer.fragment.FragmentHome;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.view.Window;
/**
 * DummyActivity
 * 더미 액티비티.
 * 
 * 어플 시작시 가장 먼저 실행되는 액티비티이다.
 * 
 * 인증을 받았는지 여부와, 국가코드등을 통해 다음 단계를 결정한다.
 *  한국- 미인증 : 인증 화면으로 이동
 *  한국- 인증 : 메인화면으로 이동
 *  외국 : 종료 
 *    어플 특성상 전화번호를 받아야 하는데 외국은 현재 전화번호 인증에 문제가 있어서 사용이 불가능하다.
 * 
 * 추가로 노티로 인한 실행등에 대한 분기 처리 로직이 들어갈 예정이다.
 */
public class DummyActivity extends Activity {
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	String TAG = "DummyActivity";
	public static Activity dummyActivity;

	// 실행중인 앱 검사
	RunningAppProcessInfo runningappprocessinfo = new RunningAppProcessInfo();
	public static int count = 0;
	// 푸시로 인한 실행 여부 및 전달된 데이터 수신 용도
	String RunMode = "";			// 전달받은 실행모드. 기본/마일리지/이벤트 등
	String message;

	// 설정 파일 저장소  
	SharedPreferences sharedPrefCustom;

	// Locale
	Locale systemLocale = null ;
	String strCountry = "" ;				// 국가 코드

	////////////////////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature( Window.FEATURE_NO_TITLE );		// no title
		setContentView(R.layout.dummy_activity);
		dummyActivity = DummyActivity.this;

		// 통신 체크
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		boolean isWifiAvail = ni.isAvailable();
		boolean isWifiConn = ni.isConnected();
		ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
		boolean isMobileAvail = ni.isAvailable();
		boolean isMobileConn = ni.isConnected();
		String status = "WiFi Avail = " + isWifiAvail + "// WiFi Conn = "
		+ isWifiConn + "// Mobile // Avail = " + isMobileAvail
		+ "// Conn = " + isMobileConn;
		Log.d(TAG,"status:"+status);

		//사용자 지역
		systemLocale = getResources().getConfiguration().locale;
		strCountry = systemLocale.getCountry();
		Log.d(TAG,"strCountry:"+strCountry);

		// prefs
		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		// receive intent
		Intent receiveIntent = getIntent();
		RunMode = receiveIntent.getStringExtra("RunMode");					// TEST  MILEAGE  MARKETING  NORMAL
		if(RunMode!=null && RunMode.length()>0){		// 데이터 전달이 가능하다.
			Log.d(TAG, RunMode);
		}else{
			Log.d(TAG, "NORMAL");		// 없으면 기본
			RunMode = "NORMAL";
		}

		// 실행중인 프로세스 검사
		count = 0;		// 버그 수정용 초기화
		// 결과는 true 가 나온다.
		isRunningProcess(this, CommonConstant.packageNames);		// 실행중인지 확인.
		if(count==1){		// 최초 실행. 
			// 시작. 검사를 통해 다음 진로 결정.
			new Thread(
					new Runnable(){
						public void run(){
							try{
								Thread.sleep(2000);		// 초기 로딩 시간. 2초간 인트로 화면 보여줌

								Intent intent;

//								// 외국인 걸러냄 - 제거.
//								if(!(strCountry.equalsIgnoreCase("KR"))){	//국적이 한국이 아님 - 사용 불가.  -- 국가코드는 사용자 단말기의 언어 설정을 따름. -- 종료 시킴.
//									new AlertDialog.Builder(returnThis())
//									.setTitle(CommonConstant.alertTitle)							
//									.setMessage("Sorry, This App can be excuted only in Korea.")
//									.setIcon(R.drawable.ic_dialog_img)		// 경고창. 
//									.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
//										public void onClick(DialogInterface dialog, int whichButton) {
//											// 그냥 사용자 확인 용이기 때문에 추가 조작 없음.
//											finish();
//										}})
//										.setNegativeButton("", null).show();
//								}

								// 동의 여부 체크하여 진행한다.
								if(checkUserAgreed()){	// 이전에 동의한 경우 : 다음 프로세스 진행. 
									Log.d(TAG,"go main");
									intent = new Intent(DummyActivity.this, FragmentHome.class);
								}else{			// 이전에 동의 하지 않은 경우 : 동의를 받는다. 사용자 동의 -> 전번인증 -> 다음 단계 는 인트로. MainActivity
									Log.d(TAG,"go for certi step1");
									intent = new Intent(DummyActivity.this, CertificationStep1.class);
									//				intent = new Intent(DummyActivity.this, Main.class);
								}

								if(RunMode.equals("MILEAGE")){			// ** 
									intent.putExtra("RunMode", "MILEAGE");		// 마일리지 변경일때 알려준다.
								}else if(RunMode.equals("MARKETING")){		// 이벤트 푸쉬일 경우 해당 이벤트 화면을 보여줘야 한다. 새 인텐트로 액티비티를 실행해주면 된다.  
									intent.putExtra("RunMode", "MARKETING");			// 현재 마일리지 모드만 반응 
								}//  그 외에는 추가 동작 하지 않는다.
								startActivity(intent);
								finish();
							}catch(InterruptedException ie){
								ie.printStackTrace();
								finish();
							}
						}
					}
			).start();



		}else{				// 이미 실행중.   
			count = count -1;
			if(count<0){
				count = 0;
			}
			finish();
		}


	}


	/**
	 * 컨택스트 반환
	 */
	public Context returnThis(){
		return this;
	}


	/**
	 * isRunningProcess
	 *  중복 실행 방지를 위해 카운팅 체크를 한다.
	 *    항상 기동중이기때문에 결과는 true. 
	 * @param context
	 * @param packageName
	 * @return isRunning
	 */
	public static boolean isRunningProcess(Context context, String packageName) {
		boolean isRunning = false;
		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);   
		List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
		for(RunningAppProcessInfo rap : list)
		{
			if(rap.processName.equals(packageName))
			{
				isRunning = true;
				count= count+1;		// 실행중인 캐럿수 (중복 실행 방지 용)
				Log.d("Log","count:"+count);
				break;
			}
		}
		return isRunning;
	}

	// 이전에 동의한 적이 있는지 여부를 확인한다.(인증 후라서 동의정보 및 전번까지 저장되있으므로 인증 필요 없음. 전번 저장 되어있음.)
	public Boolean checkUserAgreed(){
		String agreedYN = sharedPrefCustom.getString("agreedYN", "N");		// 동의 했는지 여부
		if(agreedYN.equals("Y")){		// 이전에 동의한 경우
			Log.d(TAG,"already agree");
			return true;	 
		}else{							// 이전에 동의 안한 경우
			Log.d(TAG,"did not agree");
			return false;
		}
	}

}
